package cn.getech.data.metadata.service;

import cn.getech.data.intelligence.common.utils.PageUtils;
import cn.getech.data.intelligence.common.utils.R;
import cn.getech.data.metadata.entity.meta.CollectionTableInfo;
import cn.getech.data.metadata.entity.permission.CollectionTablePermissionExt;
import cn.getech.data.metadata.model.dto.AddCollectionRelationDto;
import cn.getech.data.metadata.model.req.collectiontableinfo.CollectiionTableInfoListReq;
import cn.getech.data.metadata.model.req.collectiontableinfo.CollectionTableInfoChangeNotifyReq;
import cn.getech.data.metadata.model.req.collectiontableinfo.CollectionTableInfoDeleteReq;
import cn.getech.data.metadata.model.req.collectiontableinfo.CollectionTableInfoUpdateReq;
import cn.getech.data.metadata.model.res.CollectionTableFieldRes;
import cn.getech.data.metadata.model.res.CollectionTableInfoListRes;
import cn.getech.data.metadata.model.res.collectiontablestatistics.RelationTable;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface CollectionTableInfoService extends IService<CollectionTableInfo> {
    R info(Integer id);

    PageUtils<CollectionTableInfoListRes> listBy(CollectiionTableInfoListReq req);

    void update(CollectionTableInfoUpdateReq req);

    List<CollectionTableInfo> listPage(long offset, long limit);

    void update(CollectionTableInfoChangeNotifyReq req);

    void delete(CollectionTableInfoDeleteReq req);

    JSONObject getBloodRelationJSON(Integer id, Integer type, Integer flag);

    // 添加血缘关系
    boolean bloodRelationAdd(AddCollectionRelationDto addCollectionRelationDto);

    ////移除血缘关系 plus
    boolean removeBloodRelationPlus(RelationTable relationTableList);

    // 获取当前表的信息，还有数据源数据
    JSONObject  getbloodParameterPlus(Integer id);

    // 获取数据源下的数据库
    List<String> getBloodParameterDbPlus(Map<String,Object> params);

   // 获取新增血缘是的血缘表
    List<Map<String, Object>> getBloodParameterTablePlus(Map<String, Object> params);


    //获取表血缘字段
    List<CollectionTableFieldRes> getbloodParameterFiledPlus(Integer id);

    void saveTableDbUsers(List<CollectionTableInfo> tableAdds,
                          List<CollectionTableInfo> tableUpdates,
                          List<CollectionTableInfo> tableDeletes,
                          String dbUserName);

    PageUtils <CollectionTablePermissionExt>listPageByRole(Map<String, Object> params);

    List<Map<Integer,String>> listUserList();

    void savePermission(List<CollectionTablePermissionExt> permissionList);

    void saveMetaPermission(List<CollectionTableInfo> tableAllList, Long initRole, List<CollectionTableInfo> tableDeletes, Long runUser);

    //保存表和目录之间的关系
    void saveCollectionTableCategory(Integer tableId,Long taskId,Integer tenantId,Integer userId);
}

